package br.com.gip.repository.dao;

import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import br.com.gip.repository.model.Artefato;
import br.com.gip.repository.model.Usuario;
import br.com.gip.repository.persistence.HibernateDao;

@Repository
@Transactional
public class UsuarioDao extends HibernateDao<Usuario, Long> {

	private static final long serialVersionUID = 8884749204290329463L;

	public Usuario findByLogin(String login) {
		Criteria criteria = this.getCurrentSession().createCriteria(Usuario.class, "u");
		criteria.add(Restrictions.eq("u.login", login));
		return (Usuario) criteria.uniqueResult();
	}
	
	
	@SuppressWarnings("unchecked")
	public List<Usuario> findByFilter(String nome, Long departamentoId, Long cargoId) {
		Criteria criteria = this.getCurrentSession().createCriteria(Usuario.class, "a");
		
		if (!StringUtils.isBlank(nome)) {
			criteria.add(Restrictions.eq("nome", nome));	
		}
		
		if (departamentoId != null && departamentoId != 0) {
			criteria.add(Restrictions.eq("departamento.id", departamentoId));
		}
		
		if (cargoId != null && cargoId!= 0) {
			criteria.add(Restrictions.eq("cargo.id", cargoId));
		}
		
		return (List<Usuario>) criteria.list();
	}
	
}